[環境建置,Elasticsearch 需要先建置,Collector 組件會將資訊存入 Elasticsearch中
query:
container_name: jaeger_query
image: jaegertracing/jaeger-query
environment:
- SPAN_STORAGE_TYPE=elasticsearch
- ES_SERVER_URLS=http://192.168.101.129:3001
- ES_TAGS_AS_FIELDS_ALL=true
- LOG_LEVEL=debug
collector:
container_name: jaeger_collector
image: jaegertracing/jaeger-opentelemetry-collector
environment:
- SPAN_STORAGE_TYPE=elasticsearch
- LOG_LEVEL=debug
command: [
"--es.server-urls=http://192.168.101.129:3001",
"--es.num-shards=3",
"--es.num-replicas=0"
]
agent:
container_name: jaeger_agent
image: jaegertracing/jaeger-opentelemetry-agent
command: ["--reporter.grpc.host-port=jaeger_collector:14250", "--log-level=debug"]
導入 OoenTelemetry
一般運行 Spring boot 是用 java –jar file.jar
,而 Opentelemetry 提供自動配置的 Jar 可參考 opentelemetry-java-instrumentation,最後透過 javaagent
導入 java -javaagent:opentelemetry-javaagent-all.jar –jar file.jar
。為了與 jaeger 進行交互,需配置以下
當中 Service 是 OTEL_RESOURCE_ATTRIBUTES 所設置的 service.name
上圖有一個時間軸,而每個圈圈表示一個 trace。每個 trace 所需時間都不一樣,因此可藉由此時間軸觀察花費時間最大的 trace 並進行觀察有無優化可能,當中 Sort 選項也可選擇排序方式。
將每個 Span 展開後,基本上都會存在著 Tages 和 Process 的資訊。Tages 是每個 Span 的補充字段以 key:value 顯示,相對的 Process 偏向對系統層面的補充字段。當過程中有錯誤時,將會以 Logs 欄位呈現錯誤的堆疊。
使用 Trace Graph 觀察,結果如下更加直觀清楚知道調用過程。每個不同的呈現其細節都不一樣。
在 Jaeger 上還有很多東西可以使用。透過 opentelemetry 規範,可讓不斷擴展的服務,利於追蹤並查明其可能故障或性能降低的地方。與日誌比較,日誌儲存成本高,在做除錯時沒適當的搜尋格式,每個服務同時打印日誌時,這除錯過程更加艱辛,日誌不會有上下文關係。